1
Além da Armadilha do NULL
AI013Lesson 2
00:00

A transição dos macros estilos C para literais seguros em tipo do C++ representa uma mudança fundamental na usabilidade da linguagem, resolvendo a "Armadilha do NULL" onde a ambiguidade do macro zero causa erros lógicos silenciosos.

1. Falha na Resolução de Sobrecarga

Nos padrões legados (C++98), NULL é frequentemente definido como 0. Quando passado para funções sobrecarregadas, o compilador resolve NULL como um inteiro. Isso é evidenciado por:

if (std::is_same<decltype(NULL), decltype(0)>::value)
std::cout << "NULL é um int";

2. A Solução nullptr

O C++11 introduziu nullptr, uma palavra-chave do tipo std::nullptr_t. Diferentemente do macro, ele não pode ser convertido implicitamente para um tipo integral (exceto bool), garantindo que sejam selecionadas sobrecargas específicas de ponteiros.

A Armação Antigafoo(NULL)Chama foo(int)A Solução Modernafoo(nullptr)Chama foo(char*)

3. Ligação e Interoperabilidade

O C++ moderno exige extern "C" para evitar o mangleamento de nomes ao ligar com código C (por exemplo, compilado com gcc). Manter ponteiros seguros em tipo nessa fronteira é crítico.

$$\text{std::nullptr\_t} \neq \text{int}$$

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>